﻿using University.Workshop.Business;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using University.Workshop.Model;

namespace University.Workshop.Tests
{
    
    
    /// <summary>
    ///Se trata de una clase de prueba para PrincipalManagerTest y se pretende que
    ///contenga todas las pruebas unitarias PrincipalManagerTest.
    ///</summary>
    [TestClass()]
    public class PrincipalManagerTest
    {


        private TestContext testContextInstance;

        /// <summary>
        ///Obtiene o establece el contexto de la prueba que proporciona
        ///la información y funcionalidad para la ejecución de pruebas actual.
        ///</summary>
        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        #region Atributos de prueba adicionales
        // 
        //Puede utilizar los siguientes atributos adicionales mientras escribe sus pruebas:
        //
        //Use ClassInitialize para ejecutar código antes de ejecutar la primera prueba en la clase 
        //[ClassInitialize()]
        //public static void MyClassInitialize(TestContext testContext)
        //{
        //}
        //
        //Use ClassCleanup para ejecutar código después de haber ejecutado todas las pruebas en una clase
        //[ClassCleanup()]
        //public static void MyClassCleanup()
        //{
        //}
        //
        //Use TestInitialize para ejecutar código antes de ejecutar cada prueba
        //[TestInitialize()]
        //public void MyTestInitialize()
        //{
        //}
        //
        //Use TestCleanup para ejecutar código después de que se hayan ejecutado todas las pruebas
        //[TestCleanup()]
        //public void MyTestCleanup()
        //{
        //}
        //
        #endregion


        /// <summary>
        ///Una prueba de GetAllInfo
        ///</summary>
        [TestMethod()]
        [ExpectedException(typeof(ArgumentException))]
        public void GetAllInfoTestWhenRoomNameIsNull()
        {
            string roomName = string.Empty; // TODO: Inicializar en un valor adecuado
            DateTime date = new DateTime(); // TODO: Inicializar en un valor adecuado
            string state = string.Empty; // TODO: Inicializar en un valor adecuado
            Information actual;
            actual = PrincipalManager.GetAllInfo(roomName, date, state);
        }

        /// <summary>
        ///Una prueba de GetAllInfo
        ///</summary>
        [TestMethod()]
        [ExpectedException(typeof(ArgumentException))]
        public void GetAllInfoTestWhenDateIsNULL()
        {
            string roomName = "a21"; // TODO: Inicializar en un valor adecuado
            DateTime date = new DateTime(); // TODO: Inicializar en un valor adecuado
            string state = "Taken"; // TODO: Inicializar en un valor adecuado
            Information actual;
            actual = PrincipalManager.GetAllInfo(roomName, date, state);
        }
        /// <summary>
        ///Una prueba de GetAllInfo
        ///</summary>
        [TestMethod()]
        public void GetAllInfoTest()
        {
            string roomName = "a21"; // TODO: Inicializar en un valor adecuado
            DateTime date = new DateTime(2011,05,04); // TODO: Inicializar en un valor adecuado
            string state = "Taken"; // TODO: Inicializar en un valor adecuado
            Information expected = new Information
            {
                CheckIn = new DateTime(2011, 05, 04),
                Checkout = new DateTime(2011, 05, 05),
                ClientInfo = new Client { ClientId = "12345", FullName = "Daniel Rocabado" },
                State = "Taken",
                CostSaleProducts = new float(),
                RoomInfo = new Room { Id =2, Name="a21", TypesName="Doble"}

            };
            Information actual;
            actual = PrincipalManager.GetAllInfo(roomName, date, state);
            Assert.AreEqual(expected.CheckIn, actual.CheckIn);
            Assert.AreEqual(expected.Checkout, actual.Checkout);
            Assert.AreEqual(expected.CostSaleProducts, actual.CostSaleProducts);
        }
    }
}
